home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 April / PCWorld_2008-04_cd.bin / v cisle / adblockplus / adblock_plus-0.7.5.3-fx+tb+sm+fl.xpi / install.js < prev    next >
Text File  |  2007-09-24  |  5KB  |  154 lines

  1. // constants
  2. const APP_DISPLAY_NAME = "Adblock Plus";
  3. const APP_NAME = "adblockplus";
  4. const APP_PACKAGE = "/adblockplus.mozdev.org";
  5. const APP_VERSION = "0.7.5.3";
  6. const WARNING = "WARNING: You need administrator privileges to install Adblock Plus. It will be installed in the application directory for all users. Installing Adblock Plus in your profile is currently not supported in SeaMonkey. Proceed with the installation?";
  7. const VERSION_ERROR = "This extension can only be installed in a browser based on Gecko 1.8 or higher, please upgrade your browser. Compatible browsers include Firefox 1.5, SeaMonkey 1.0 and Flock 0.5.";
  8. const NOT_WRITABLE_ERROR = "This extension requires write access to the application directory to install properly. Currently write access to some of the relevant subdirectories is forbidden, you probably have to log in as root before installing. After installation no elevated privileges will be necessary, read access is sufficient to use Adblock Plus."
  9. const locales = [
  10.     "en-US",
  11.     "ar",
  12.     "ca-AD",
  13.     "cs-CZ",
  14.     "da-DK",
  15.     "de-DE",
  16.     "el-GR",
  17.     "en-GB",
  18.     "es-ES",
  19.     "et-EE",
  20.     "fa-IR",
  21.     "fi-FI",
  22.     "fr-FR",
  23.     "fy-NL",
  24.     "hr-HR",
  25.     "hu-HU",
  26.     "it-IT",
  27.     "ja-JP",
  28.     "ko-KR",
  29.     "lt-LT",
  30.     "mn-MN",
  31.     "nb-NO",
  32.     "nl-NL",
  33.     "pl-PL",
  34.     "pt-BR",
  35.     "pt-PT",
  36.     "ro-RO",
  37.     "ru-RU",
  38.     "sk-SK",
  39.     "sl-SI",
  40.     "sv-SE",
  41.     "th-TH",
  42.     "tr-TR",
  43.     "uk-UA",
  44.     "vi-VN",
  45.     "zh-CN",
  46.     "zh-TW",
  47.     null
  48. ];
  49.  
  50. // Gecko 1.7 doesn't support custom button labels
  51. var incompatible = (typeof Install.BUTTON_POS_0 == "undefined");
  52. if (incompatible)
  53.     alert(VERSION_ERROR);
  54.  
  55. if (!incompatible) {
  56.     // Check whether all directories can be accessed
  57.     var jarFolder = getFolder("Chrome");
  58.     var dirList = [
  59.         jarFolder,
  60.         getFolder("Components"),
  61.         getFolder(getFolder("Program", "defaults"), "pref")
  62.     ];
  63.     for (var i = 0; i < dirList.length; i++)
  64.         if (!File.isWritable(dirList[i]))
  65.             incompatible = true;
  66.  
  67.     if (incompatible)
  68.         alert(NOT_WRITABLE_ERROR);
  69. }
  70.  
  71. if (!incompatible && confirm(WARNING, APP_DISPLAY_NAME)) {
  72.     /* Pre-Install Cleanup (for prior versions) */
  73.     
  74.     // List of files to be checked
  75.     var checkFiles = [
  76.         [getFolder("Profile", "chrome"), "adblockplus.jar"],      // Profile jar
  77.         [getFolder("Chrome"), "adblockplus.jar"],                 // Root jar
  78.         [getFolder("Components"), "nsAdblockPlus.js"],            // Root component
  79.         [getFolder("Components"), "nsAdblockPlus.xpt"],           // Component interface
  80.         [getFolder("Profile", "components"), "nsAdblockPlus.js"], // Profile component
  81.         [getFolder("Profile"), "XUL FastLoad File"],              // XUL cache Mac Classic
  82.         [getFolder("Profile"), "XUL.mfast"],                      // XUL cache MacOS X
  83.         [getFolder("Profile"), "XUL.mfasl"],                      // XUL cache Linux
  84.         [getFolder("Profile"), "XUL.mfl"]                         // XUL cache Windows
  85.     ];
  86.  
  87.     // Remove any existing files
  88.     initInstall("pre-install", "/rename", "0.0");  // open dummy-install
  89.     for (var i = 0 ; i < checkFiles.length ; i++) {
  90.         var currentDir = checkFiles[i][0];
  91.         var name = checkFiles[i][1];
  92.         var oldFile = getFolder(currentDir, name);
  93.  
  94.         // Find a name to rename the file into
  95.         var newName = name + "-uninstalled";
  96.         for (var n = 1; File.exists(oldFile) && File.exists(getFolder(currentDir, newName)); n++)
  97.             newName = name + n + "-uninstalled";
  98.     
  99.         if (File.exists(oldFile))
  100.             File.rename(oldFile, newName);
  101.     }
  102.     performInstall(); // commit renamed files
  103.  
  104.     /* Main part of the installation */
  105.  
  106.     var chromeType = DELAYED_CHROME;
  107.  
  108.     var files = [
  109.         ["chrome/adblockplus.jar", jarFolder],
  110.         ["components/nsAdblockPlus.js", getFolder("Components")],
  111.         ["components/nsAdblockPlus.xpt", getFolder("Components")],
  112.         ["defaults/preferences/adblockplus.js", getFolder(getFolder("Program", "defaults"), "pref")],
  113.     ];
  114.     
  115.     // initialize our install
  116.     initInstall(APP_NAME, APP_PACKAGE, APP_VERSION);
  117.     
  118.     // Add files
  119.     for (var i = 0; i < files.length; i++)
  120.         addFile(APP_NAME, APP_VERSION, files[i][0], files[i][1], null);
  121.  
  122.     var jar = getFolder(jarFolder, "adblockplus.jar");
  123.     try {
  124.         var err = registerChrome(CONTENT | chromeType, jar, "content/");
  125.         if (err != SUCCESS)
  126.             throw "Chrome registration for content failed (error code " + err + ").";
  127.  
  128.         err = registerChrome(SKIN | chromeType, jar, "skin/classic/");
  129.         if (err != SUCCESS)
  130.             throw "Chrome registration for skin failed (error code " + err + ").";
  131.  
  132.         for (i = 0; i < locales.length; i++) {
  133.             if (!locales[i])
  134.                 continue;
  135.  
  136.             err = registerChrome(LOCALE | chromeType, jar, "locale/" + locales[i] + "/");
  137.             if (err != SUCCESS)
  138.                 throw "Chrome registration for " + locales[i] + " locale failed (error code " + err + ").";
  139.         }
  140.  
  141.         var err = performInstall();
  142.         if (err != SUCCESS && err != 999)
  143.             throw "Committing installation failed (error code " + err + ").";
  144.  
  145.         alert("Adblock Plus " + APP_VERSION + " is now installed.\n" +
  146.                     "It will become active after you restart your browser.");
  147.     }
  148.     catch (ex) {
  149.         alert("Installation failed: " + ex + "\n" +
  150.                     "You probably don't have the necessary permissions (log in as system administrator).");
  151.         cancelInstall(err);
  152.     } 
  153. }
  154.